package GUI;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;

import Baza.BazaDanych;
import Baza.Konfiguracja;

public class DodajLek {
	private JFrame frame;
	private Konfiguracja konfiguracja = new Konfiguracja();
	
	public DodajLek(){
		createAndShowGUI();
	}
	
	private JFrame createAndShowGUI(){
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		addComponentToPane(frame.getContentPane());
		frame.pack();
		frame.setLocation(50, 50);
		frame.setResizable(false);
        frame.setVisible(true);
        frame.setTitle(konfiguracja.getDrugNewField());
        
        return frame;
	}
	
	private void addComponentToPane(Container pane){
		JPanel addDrug = addDrug();
		pane.add(addDrug);
	}
	
	private JTextField nazwaLeku, cena, sciezka, opis;
	private JFormattedTextField dataWaznosci;
	@SuppressWarnings("rawtypes")
	private JComboBox recepta;
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private JPanel addDrug(){
		JPanel panel = new JPanel(new GridBagLayout());
		
		nazwaLeku = new JTextField();
		nazwaLeku.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		cena = new JTextField();
		cena.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		sciezka = new JTextField();
		sciezka.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		opis = new JTextField();
		opis.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		dataWaznosci = getDataWaznosci();
		recepta = new JComboBox(new String[]{"Bez recepty", "Zwykla", "Rozowa"});
		recepta.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		JButton addDrugButton = getAddDrugButton();
		JButton cancelButton = getCancelButton();
		
		GridBagConstraints grid = new GridBagConstraints();
		grid.gridwidth = GridBagConstraints.REMAINDER;
		
		panel.add(new JLabel(konfiguracja.getDrugNameField()));
		panel.add(nazwaLeku, grid);
		panel.add(new JLabel(konfiguracja.getDrugValidField()));
		panel.add(dataWaznosci, grid);
		panel.add(new JLabel(konfiguracja.getDrugTypeField()));
		panel.add(recepta, grid);
		panel.add(new JLabel(konfiguracja.getDrugCostField()));
		panel.add(cena, grid);
		panel.add(new JLabel(konfiguracja.getDrugDescriptionField()));
		panel.add(opis, grid);
		panel.add(new JLabel(konfiguracja.getDrugPathField()));
		panel.add(sciezka, grid);
		panel.add(addDrugButton);
		panel.add(cancelButton);
		
		return panel;
	}
	
	private JFormattedTextField getDataWaznosci(){
		MaskFormatter dateMask = null;
		try {
        	dateMask = new MaskFormatter("##-##-####");
        	dateMask.setPlaceholderCharacter(' ');
        } catch (ParseException e) {
            e.printStackTrace();
        }
		JFormattedTextField date = new JFormattedTextField(dateMask);
		date.setPreferredSize(new Dimension(konfiguracja.getFieldWidth(), konfiguracja.getFieldHeight()));
		
		return date;
	}
	
	private JButton getAddDrugButton(){
		JButton drug = new JButton(konfiguracja.getAcceptButton());
		drug.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				JFrame errorFrame = null;
				BazaDanych database = new BazaDanych();
				
				if(nazwaLeku.getText().equals("")||cena.getText().equals("")||sciezka.getText().equals("")||opis.getText().equals("")||dataWaznosci.getText().equals("")){
					JOptionPane.showMessageDialog(errorFrame, konfiguracja.getRegisterEmptyError(), konfiguracja.getErrorMessage(), JOptionPane.WARNING_MESSAGE);
				}else{
					database.insertLeki("Leki/"+sciezka.getText().trim(), nazwaLeku.getText().trim(), (String)recepta.getSelectedItem(), Double.parseDouble(cena.getText()), dataWaznosci.getText(), opis.getText());
					frame.dispose();
				}
				
				database.closeConnection();
			}
		});
		
		return drug;
	}
	
	private JButton getCancelButton(){
		JButton cancel = new JButton(konfiguracja.getCancelButton());
		cancel.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				frame.dispose();
			}
		});
		return cancel;
	}
}
